// src/mixins/formDialogMixin.js
export default {
  props: {
    visible: {
      type: Boolean,
      required: true
    },
    data: {
      type: Object,
      default: null
    }
  },

  data() {
    return {
      modal_loading: false,  // 提交加载状态
      spinShow: false,       // 数据加载状态
      formRules: {},         // 表单验证规则（由组件覆盖）
      formData: {}           // 表单数据（由组件初始化）
    };
  },

  watch: {
    data: {
      handler(newVal) {
        if (newVal) {
          this.loadData(newVal);
        } else {
          this.resetForm();
        }
      },
      immediate: true
    }
  },

  methods: {
    // 必须由组件实现的方法
    loadData(data) {
      throw new Error('组件必须实现 loadData 方法');
    },

    // 必须由组件实现的方法
    resetForm() {
      throw new Error('组件必须实现 resetForm 方法');
    },

    // 提交表单（可由组件覆盖）
    submitForm() {
      this.$refs.form.validate(valid => {
        if (valid) {
          this.$emit('submit', this.formData, () => {
            this.$emit('update:visible', false);
            this.$emit('done');
          });
        }
      });
    },

    // 关闭弹窗
    closeDialog() {
      this.$emit('update:visible', false);
    }
  }
};
